import {
  getToken,
  setToken,
  getRefToken,
  setRefToken,
  removeToken
} from '@/utils/auth'

import {
  loginLastRecord,
  getUserInfo,
  getUserAuth,
  loginRecord,
  userDeptList,
  tokenRefresh,
  dgWorkLogin,
  getKanBanConfig,
  getKanBanBlock

} from '@/api/login'

import {
  resetRouter
} from '@/router'

const getDefaultState = () => {
  return {
    token: getToken(),
    ref_token: getRefToken(),
    user_info: {},
    user_name: '',
    user_id: "",
    user_type: 0, // 0-个人 1-企业
    phone: "",
    dept_id: "",
    dept_name: "",
    org_id: "",
    org_name: "",
    org_dept_list: [],


    config: {}, // 默认打开设置
    block: {}, // 配置

    auth: {
      // 数据统计
      data_stats: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 查看表单详情
        query_detail: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 下载
        download: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
      },
      // 多屏监控
      msm: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
      },
      // 航线排期
      airline_schedule: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 飞行记录搜索
        select: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 航线列表搜索
        select_airline: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 航线详情查看
        check_airline: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 照片查看
        check_pic: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // // 飞行照片下载
        // download_pic: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // 预警信息查看
        check_warning: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 飞行视频查看
        check_video: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 飞行视频下载
        download_video: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 修改航行名称
        edit_record_name: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 修改航线排期
        edit_airline_schedule: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // // 修改航线场景
        // edit_airline_scene: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
      },
      // 预警信息
      warning: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 筛选
        select: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 事件上报
        push_event: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 忽略事件
        ignore_event: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 设置典型
        set_typical: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 事件分享
        share_event: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // // 事件下载
        // download: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
      },
      // 指点任务
      order: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 新建任务
        create: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 删除任务
        delete: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // // 编辑任务
        // edit: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 成果下载
        // download: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 成果分享
        // share: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
      },
      // 时空搜图
      search_photo: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // // 图片下载
        // download_pic: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 事件标注
        // markdown: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 订阅
        // subscribe: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 分享
        // share: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
      },
      // 飞行监控
      flight_monitor: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // // 云台控制
        // ptz_control: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 飞行监控
        // flight_monitor: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 一键起飞
        // take_off: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 一键返航
        // return_home: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
      },
      // // 地块标注
      // mark_land: {
      // // 查看
      //   query: {
      //     have_auth: true,
      //     perview_type: 1,
      //     perview_depts: [1, 2]
      //   },
      // // 新增目录
      //   add_folder: {
      //     have_auth: true,
      //     perview_type: 1,
      //     perview_depts: [1, 2]
      //   },
      // // 新增地块
      //   add_land: {
      //     have_auth: true,
      //     perview_type: 1,
      //     perview_depts: [1, 2]
      //   },
      // // 地块编辑
      //   edit_land: {
      //     have_auth: true,
      //     perview_type: 1,
      //     perview_depts: [1, 2]
      //   },
      // // 地块订阅
      //   subs_land: {
      //     have_auth: true,
      //     perview_type: 1,
      //     perview_depts: [1, 2]
      //   },
      // },
      // 项目专题
      project_topic: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // // 两期对比
        // compare: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 项目测量
        // measure: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 项目下载
        // download: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 项目分享
        // share: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 新增标注目录
        // add_folder: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 新增项目标注
        // add_mark: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 导出项目标注
        // export_mark: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
        // // 删除项目标注
        // del_mark: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
      },
      // // 设置
      // set: {
      // // 查看
      // query: {
      //     have_auth: true,
      //     perview_type: 1,
      //     perview_depts: [1, 2]
      //   },
      // // 默认参数设置
      // default_set: {
      //     have_auth: true,
      //     perview_type: 1,
      //     perview_depts: [1, 2]
      //   },
      // // 面板设置
      // panel_set: {
      //     have_auth: true,
      //     perview_type: 1,
      //     perview_depts: [1, 2]
      //   },
      // },
      // 图层导航
      layer: {
        // 查看
        query: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 无人机
        aircraft: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 空域
        airspace: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 全景
        panorama: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 三维
        three_d: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 正射
        orthophoto: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 巡检区域
        inspection_area: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 问题聚类
        cluster_issue: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // 问题定位
        position_issue: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
      },
      // 地图
      map: {
        // 三维地图
        map3D: {
          have_auth: true,
          perview_type: 1,
          perview_depts: [1, 2]
        },
        // // 二维地图
        // map2D: {
        //   have_auth: true,
        //   perview_type: 1,
        //   perview_depts: [1, 2]
        // },
      },
    }
  }
}

const state = getDefaultState()

const mutations = {
  RESET_STATE: (state) => {
    Object.assign(state, getDefaultState())
  },
  SET_TOKEN: (state, token) => {
    state.token = token
  },
  SET_REF_TOKEN: (state, ref_token) => {
    state.ref_token = ref_token
  },
  SET_USER_INFO: (state, user_info) => {
    state.user_info = user_info
  },
  SET_USER_NAME: (state, name) => {
    state.user_name = name
  },
  SET_USER_ID: (state, id) => {
    state.user_id = id
  },
  SET_USER_TYPE: (state, type) => {
    state.user_type = type
  },
  SET_PHONE: (state, phone) => {
    state.phone = phone
  },
  SET_DEPT_NAME: (state, name) => {
    state.dept_name = name
  },
  SET_DEPT_ID: (state, id) => {
    state.dept_id = id
  },
  SET_ORG_NAME: (state, name) => {
    state.org_name = name
  },
  SET_ORG_ID: (state, id) => {
    state.org_id = id
  },
  SET_ORG_DEPT_LIST: (state, list) => {
    state.org_dept_list = list
  },
  SET_AUTH: (state, auth) => {
    state.auth = auth
  },
  SET_CONFIG: (state, config) => {
    state.config = config
  },
  SET_BLOCK: (state, block) => {
    state.block = block
  },

}

const actions = {
  // 获取token
  setTokenLogin({
    commit,
    dispatch
  }, token) {
    console.log(token)
    commit('SET_TOKEN', token.token)
    commit('SET_REF_TOKEN', token.refresh_token)
    setToken(token.token)
    setRefToken(token.refresh_token)
  },

  //  获取用户信息
  getUserInfo({
    commit,
    state
  }) {
    return new Promise((resolve, reject) => {
      getUserInfo().then(res => {
        console.log(res)
        let data = res.data
        if (!data) {
          return reject('Verification failed, please Login again.')
        }

        commit('SET_USER_NAME', data.user_name)
        commit('SET_USER_ID', data.user_id)
        commit('SET_PHONE', data.phone)
        localStorage.setItem('phone', data.phone)
        commit('SET_USER_TYPE', data.user_type)

        commit('SET_USER_INFO', JSON.parse(JSON.stringify(data)))

        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  },
  // 重新获取token
  tokenRefresh({
    commit,
    dispatch
  }) {
    return new Promise((resolve, reject) => {
      tokenRefresh().then(response => {
        removeToken() // must remove  token  first
        if (response && response.data && response.data.new_token) {
          setToken(response.data.new_token)
          commit('SET_TOKEN', response.data.new_token)
        }
        resolve()
      }).catch(error => {
        console.log(error)
        reject('已失效，需要重新登录')
      })
    })
  },


  // 更改部门信息
  setDeptInfo({
    commit
  }, dept) {
    commit('SET_DEPT_NAME', dept.dept_name)
    commit('SET_DEPT_ID', dept.dept_id)
    commit('SET_ORG_NAME', dept.p_name)
    commit('SET_ORG_ID', dept.p_id)
  },
  // 更改组织
  setOrgInfo({
    commit
  }, org) {
    commit("SET_ORG_ID", org.dept_id)
    commit("SET_ORG_NAME", org.dept_name)
    commit('SET_DEPT_NAME', org.department[0].dept_name)
    commit('SET_DEPT_ID', org.department[0].dept_id)
  },

  // 更改权限
  setAuth({
    commit,
    state
  }, data) {
    console.log("获取权限", state)
    return new Promise(async (resolve, reject) => {
      if (!getToken) {
        return
      }
      let userDeptRes = await userDeptList()
      let lastDeptRes = await loginLastRecord()
      console.log(userDeptRes);
      console.log(lastDeptRes);
      if (userDeptRes.error_code !== 0) {
        return reject("组织列表报错")
      }
      if (lastDeptRes.error_code !== 0) {
        return reject("上次登录报错")
      }

      // 如果是没有登录 默认空数组 空对象

      let orgList = userDeptRes.data || []

      orgList = orgList.filter(org => {
        org.department = org.department.filter(dept => {
          return dept.status == 0
        })
        if (org.user_dept_status == 0 && org.department.length > 0) {
          return org
        }
      })

      let last = lastDeptRes.data || {}

      commit("SET_ORG_DEPT_LIST", orgList)
      if (orgList.length <= 0) {
        return reject("无组织")
      }

      // 无组织 或 无部门
      if (!state.org_id || !state.dept_id) {
        let orgId = !!state.org_id ? state.org_id : last.p_id
        let orgFind = orgList.find(org => {
          return org.dept_id == orgId
        })
        if (!!orgFind) {
          commit("SET_ORG_ID", orgFind.dept_id)
          commit("SET_ORG_NAME", orgFind.dept_name)
          if (state.org_id == last.p_id) {
            let deptFind = orgFind.department.find(dept => {
              return dept.dept_id == last.dept_id
            })

            if (!!deptFind) {
              commit("SET_DEPT_ID", deptFind.dept_id)
              commit("SET_DEPT_NAME", deptFind.dept_name)
            } else {
              commit("SET_DEPT_ID", orgFind.department[0].dept_id)
              commit("SET_DEPT_NAME", orgFind.department[0].dept_name)
            }
          } else {
            commit("SET_DEPT_ID", orgFind.department[0].dept_id)
            commit("SET_DEPT_NAME", orgFind.department[0].dept_name)
          }

        } else {
          commit("SET_ORG_ID", orgList[0].dept_id)
          commit("SET_ORG_NAME", orgList[0].dept_name)
          commit("SET_DEPT_ID", orgList[0].department[0].dept_id)
          commit("SET_DEPT_NAME", orgList[0].department[0].dept_name)
        }
      }
      if (!state.org_id || !state.dept_id) {
        return reject()
      }

      await loginRecord({
        dept_id: state.dept_id,
        p_id: state.org_id
      })

      // let authRes = await getUserAuth({
      //   user: state.user_id,
      //   dept: state.dept_id
      // })

      // if (authRes.error_code === 0) {

      //   // wkl add
      //   authRes.data.kanban.layer.road_map = {
      //     have_auth: true
      //   }
      //   authRes.data.kanban.layer.roi_map = {
      //     have_auth: true
      //   }

      //   commit("SET_AUTH", authRes.data.kanban)
      //   console.log("auth", state.auth, authRes.data);
      // }


      let configRes = await getKanBanConfig({
        // dept_id: state.org_id
      })

      let blockRes = await getKanBanBlock({
        dept_id: state.org_id
      })


      if (configRes.error_code === 0) {
        commit("SET_CONFIG", configRes.data)
      }
      if (blockRes.error_code === 0) {
        commit("SET_BLOCK", blockRes.data)
      }
      resolve()
    }).catch(error => {
      console.log("auth", error)
      reject()
    })
  },

  // 用户退出
  logout({
    commit,
    state
  }) {
    removeToken() // must remove  token  first
    commit('RESET_STATE')
    resetRouter()
  },

  // user login
  // login({
  //   commit
  // }, userInfo) {
  //   const {
  //     username,
  //     password
  //   } = userInfo
  //   return new Promise((resolve, reject) => {
  //     login({
  //       username: username.trim(),
  //       password: password
  //     }).then(response => {
  //       const {
  //         data
  //       } = response
  //       console.log(data)
  //       commit('SET_TOKEN', data.token)
  //       setToken(data.token)
  //       resolve()
  //     }).catch(error => {
  //       reject(error)
  //     })
  //   })
  // },
  setqrlogin({
    commit,
    dispatch
  }, tokeninfo) {
    console.log(tokeninfo)
    commit('SET_TOKEN', tokeninfo.token)
    commit('SET_REF_TOKEN', tokeninfo.refresh_token)
    setToken(tokeninfo.token)
    setRefToken(tokeninfo.refresh_token)
  },





}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
